/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package agb.servlets;

import agb.Modelo.Alumno;
import agb.Modelo.Asistencias;
import agb.Modelo.Calificaciones;
import agb.Modelo.Docente;
import agb.Modelo.EnlacesTemasSylabus;
import agb.Modelo.Horarios;
import agb.Modelo.PromedioExonerados;
import agb.Modelo.Promedios;
import agb.Modelo.PromediosExo;
import agb.Modelo.ProyectosComunicados;
import agb.Modelo.Publicaciones;
import agb.Modelo.Test;
import agb.Modelo.Utilidades;
import com.google.gson.Gson;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Vector;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**ds
 *
 * @author Administrator
 */
public class SrvServletAlumnos extends HttpServlet {

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
           String accion = request.getParameter("accion");
           if(accion.equalsIgnoreCase("GradoSeccion")){
                GradoSeccion(request, response);
           }else{
                if(accion.equalsIgnoreCase("horarioDocente")){
                    HorarioDocente(request, response);
                }else{
                    if(accion.equalsIgnoreCase("resumenAsistencia")){
                        ResumenAsistencia(request, response);
                    }else{
                        if(accion.equalsIgnoreCase("evaluacionesProgramadas")){
                            EvaluacionesProgramadas(request, response);
                        }else{
                            if(accion.equalsIgnoreCase("enlaces")){                                
                                enlaces(request, response);
                            }else{
                                if(accion.equalsIgnoreCase("conceptos")){
                                    ContenidosConceptuales(request, response);
                                }else{
                                    if(accion.equalsIgnoreCase("detalleComun")){
                                        detalleComunicados(request, response);                                        
                                    }else{
                                        if(accion.equalsIgnoreCase("proyectos")){
                                            cabeceraProyectos(request, response);
                                        }else{
                                            if(accion.equalsIgnoreCase("proyectosDetalle")){
                                                detalleProyecto(request, response);
                                            }else{
                                                if(accion.equalsIgnoreCase("publicacionesBuscar")){
                                                    cabeceraPublicacionesLibros(request, response);
                                                }else{
                                                    if(accion.equalsIgnoreCase("RevistasBuscar")){
                                                        cabeceraPublicacionesRevistas(request, response);
                                                    }else{
                                                        if(accion.equalsIgnoreCase("TrabajosBuscar")){
                                                            cabeceraPublicacionesTrabajos(request, response);
                                                        }else{
                                                            if(accion.equalsIgnoreCase("publicacionDetalle")){
                                                                detallePublicacion(request, response);                                                                
                                                            }else{
                                                                if(accion.equalsIgnoreCase("notas")){
                                                                    notasPeriodo(request, response);
                                                                }else{
                                                                    if(accion.equalsIgnoreCase("comboPeriodo")){
                                                                        comboPeriodo(request, response);
                                                                    }else{
                                                                        if(accion.equalsIgnoreCase("listaAsistencia")){
                                                                            detalleAsistencia(request, response);
                                                                        }else{
                                                                            if(accion.equalsIgnoreCase("asistenciaCalendario")){
                                                                                calendarioAsistencia(request, response);
                                                                            }else if(accion.equalsIgnoreCase("horario")){
                                                                                horarioAlumno(request, response);
                                                                            }else 
                                                                            if(accion.equalsIgnoreCase("comboPeriodoMes"))
                                                                            {
                                                                                comboPeriodoMensual(request, response);
                                                                            }else if(accion.equalsIgnoreCase("proyInvestigacion")){
                                                                                proyectosInvestigacion(request, response);
                                                                            }
                                                                            else 
                                                                            if(accion.equalsIgnoreCase("comuActividad"))//Comunicado Actividad.
                                                                            {
                                                                                comunicadoActividad(request, response);
                                                                            }
                                                                            else 
                                                                            if(accion.equalsIgnoreCase("comuAnuncio"))//Comunicado Anuncio.
                                                                            {
                                                                                comunicadoActividad(request, response);
                                                                            }
                                                                            else 
                                                                            if(accion.equalsIgnoreCase("comuReunion"))//Comunicado Reunion.
                                                                            {
                                                                                comunicadoActividad(request, response);
                                                                            }
                                                                            else 
                                                                            if(accion.equalsIgnoreCase("comuCalendario"))//Comunicado Calendario.
                                                                            {
                                                                                comunicadoActividad(request, response);
                                                                            }
                                                                               else 
                                                                            if(accion.equalsIgnoreCase("descargaArticulo"))//Descargar Artículo
                                                                            {
                                                                                descargas(request, response);
                                                                            }
                                                                              else 
                                                                            if(accion.equalsIgnoreCase("descargaCurricula"))//Descargar Artículo
                                                                            {
                                                                                descargas(request, response);
                                                                            }
                                                                           
                                                                              else 
                                                                            if(accion.equalsIgnoreCase("descargaRegla"))//Descargar Regla
                                                                            {
                                                                                descargas(request, response);
                                                                            }
                                                                              else 
                                                                            if(accion.equalsIgnoreCase("descargaTramite"))//Descargar Tramite
                                                                            {
                                                                                descargas(request, response);
                                                                            }
                                                                            else
                                                                              if(accion.equalsIgnoreCase("configuracion"))
                                                                              {
                                                                                  configuracion(request, response);
                                                                              }
                                                                             else
                                                                              if(accion.equalsIgnoreCase("testVocacional"))
                                                                              {
                                                                                  testVocacional(request, response);
                                                                              }
                                                                            else
                                                                                  if(accion.equalsIgnoreCase("encuestas")){
                                                                                      encuestas(request, response);
                                                                                  }
                                                                                       
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
           }
        } finally {
            out.close();
        }
    }
    


  protected void encuestas(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            HttpSession session = request.getSession(true);
                       
           int cod = Integer.parseInt(session.getAttribute("codPersona").toString());
            ArrayList<Docente> LDocentes = new ArrayList<Docente>();
            LDocentes = Docente.NombreDocentesSegunHorarioAlumnoPorAñoAcademicoYCodigoAlumno(cod);
            StringBuilder sb = new StringBuilder();
            int i=1;
            for(Docente actual:LDocentes){
                sb.append("[\"" + (i++) 
                        
                        + "\",\"" + actual.getNombreDocente()+ " " + actual.getApellidoPaternoDocente() 
                        + "\",\"" + actual.getApellidoMaternoDocente() 
                        + "\",\"" + actual.getSeccionDocente()
                        + "\"],");
            }
            String str = sb.substring(0,sb.length()-1);
            if(str.equals("")){
                str = "[]";
            }else{
                str = "[" + str + "]";
            }
            System.out.println("str: " + str);
            request.setAttribute("docentes", str);
            this.getServletContext().getRequestDispatcher("/dinamica/alumno/AulaVirtual/AulaVirtualEncuestas.jsp").forward(request, response);

        } finally {
            out.close();
        }
    }
  

     protected void testVocacional(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException
     {
          response.setContentType("text/html;charset=UTF-8");
            response.setContentType("text/html;charset=UTF-8");
          PrintWriter out = response.getWriter();
          
          try
          {
               HttpSession session = request.getSession(true);
               ArrayList<Test> tests=Utilidades.listarTest();
               
               
               
               // ArrayList<Publicaciones> LDescargas = new ArrayList<Publicaciones>();
                //int tipo=tipoDescarga("descargaArticulo");
                
               // LDescargas = Publicaciones.listaDescargas(tipo);
               
                request.setAttribute("descargas", tests);
             this.getServletContext().getRequestDispatcher("/dinamica/alumno/AulaVirtual/AulaVirtualTestVocacional.jsp").forward(request, response);
          }
          finally
          {
               out.close();
          }
           
     }

    protected void configuracion(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException
     {
          response.setContentType("text/html;charset=UTF-8");
          
           this.getServletContext().getRequestDispatcher("/dinamica/alumno/Configuracion/Configuracion.jsp").forward(request, response);
     }
    private int tipoDescarga(String tipo)
    {
        if(tipo.equalsIgnoreCase("descargaArticulo"))
        {
            return 4;
        }
        else
        {
            if(tipo.equalsIgnoreCase("descargaRegla"))
            {
                return 5;
            }
            else
            {
                if(tipo.equalsIgnoreCase("descargaTramite"))
                {
                    return 6;
                }
                else
                {   
                     //descargaCurricula 
                        return  7;
                }
            }
        }
    }
    private String descarga(int tipo)
    {
        String rpta="";
        switch(tipo)
        {
            case 4: rpta="Articulo"; break;
            case 5: rpta="Reglamento"; break;
            case 6: rpta="FormTramite"; break;
            case 7: rpta="Curricula"; break;
        }
        return rpta;
    }
     protected void descargas(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException
     {
          response.setContentType("text/html;charset=UTF-8");
          PrintWriter out = response.getWriter();
          
          try
          {
               HttpSession session = request.getSession(true);
               
                ArrayList<Publicaciones> LDescargas = new ArrayList<Publicaciones>();
                int tipo=tipoDescarga(request.getParameter("accion"));
                LDescargas = Publicaciones.listaDescargas(tipo);
               
                request.setAttribute("descargas", LDescargas);
             this.getServletContext().getRequestDispatcher("/dinamica/alumno/Descargas/Descarga"+descarga(tipo)+".jsp").forward(request, response);
          }
          finally
          {
               out.close();
          }
     }       

    protected void GradoSeccion(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
           HttpSession session = request.getSession(true);
            int codPersona = Integer.parseInt(request.getParameter("codPersona"));
            RequestDispatcher rd;
            String anio = request.getParameter("Anio");
            Utilidades oUtilidad = Utilidades.GradoSeccionAlumno(codPersona);
            request.setAttribute("r_estilo", true);
            String next = "/dinamica/alumno/include_consulta/horario_alumno.jsp";
            session.setAttribute("grados", oUtilidad);
            session.setAttribute("anio", anio);
            rd = rd=this.getServletContext().getRequestDispatcher(next);
            rd.forward(request,response);
        } finally {
            out.close();
        }
    }
    
    protected void proyectosInvestigacion(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
           HttpSession session = request.getSession(true);
           
          
               int codPersona = Integer.parseInt(session.getAttribute("codPersona").toString());
            List<Horarios> LCursos = new ArrayList<Horarios>();
            LCursos = Horarios.listaCursosAlumnoSegunHorario(codPersona);
           
            Utilidades oUtilidades = new Utilidades();
            oUtilidades = Utilidades.GradoSeccionAlumno(codPersona);
            request.setAttribute("info", oUtilidades);
            request.setAttribute("cursos", LCursos);
            this.getServletContext().getRequestDispatcher("/dinamica/alumno/AulaVirtual/AulaVirtualInvestigacion.jsp").forward(request, response);
           
            
            
        } finally {
            out.close();
        }
    }

     protected void HorarioDocente(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
           //
             ArrayList<Docente> LDocentes = new ArrayList<Docente>();
              HttpSession session = request.getSession(true);
            int cod = Integer.parseInt(session.getAttribute("codPersona").toString());
            LDocentes = Docente.NombreDocentesSegunHorarioAlumnoPorAñoAcademicoYCodigoAlumno(cod);
            //
            if(request.getParameter("cboDocente")!=null)
            {
              ArrayList<Horarios> LHorarios = new ArrayList<Horarios> ();
              int codDocente = Integer.parseInt(request.getParameter("cboDocente"));
                Docente oDocente = new Docente();
                oDocente = Docente.NombreDocentesAnioPorCodigo(codDocente);
            LHorarios = new Horarios().HorarioDocentePorCodigoPersonaProfesor(codDocente);
           //request.setAttribute("horarios", LHorarios);
           // request.setAttribute("docente", oDocente);
                System.out.println("COLECCION:  "+new Gson().toJson(LHorarios));
                response.getWriter().write(new Gson().toJson(LHorarios));
            }
            else
            {
                System.out.println("Docente: "+LDocentes);
                request.setAttribute("docente", LDocentes);
                this.getServletContext().getRequestDispatcher("/dinamica/alumno/Horario/HorarioDocente.jsp").forward(request, response);       
            } 
        
            
          
                 
        } finally {
            
            out.close();
        }
    }

     protected void ResumenAsistencia(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try 
        {
           HttpSession session = request.getSession(true);
           RequestDispatcher rd;
           ArrayList<Asistencias> LResumen  = new ArrayList<Asistencias>();
            Calendar cal = GregorianCalendar.getInstance();            
            int cod = Integer.parseInt(request.getParameter("codigo"));
            int mes = Integer.parseInt(request.getParameter("cboPeriodo"));
            int anio = Integer.parseInt(request.getParameter("anio"));
            cal.set(anio, mes, 1);
            String fechaDesde =  cal.getActualMinimum(GregorianCalendar.DAY_OF_MONTH) + "/" + (mes + 1) + "/" + (anio );
            String fechaHasta = cal.getActualMaximum(GregorianCalendar.DAY_OF_MONTH) + "/" + (mes + 1) + "/" + (anio );
            LResumen = Asistencias.resumenAsistenciaAlumnoPorCodigoFechaDesdeYHasta(cod, fechaDesde, fechaHasta);
            String periodo = fechaDesde + " - " +fechaHasta;
            request.setAttribute("r_estilo", true);
            String next = "/dinamica/alumno/include_consulta/rpt_asistencias_alumno.jsp";
            session.setAttribute("resumenAsistencia", LResumen);
            session.setAttribute("periodo", periodo);
            rd = rd=this.getServletContext().getRequestDispatcher(next);
            rd.forward(request,response);
        } finally {
            out.close();
        }
    }

     protected void detalleAsistencia(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            String arr[] = request.getParameter("periodo").split(" - ");
            request.setAttribute("lista", new Asistencias().listaAsistenciaAlumnoPorCodigoFechaDesdeYHasta(Integer.parseInt(request.getParameter("codAlumno")), arr[0], arr[1]));
            this.getServletContext().getRequestDispatcher("/dinamica/alumno/include_consulta/detalleAsistencia_alumno.jsp").forward(request, response);
        } finally {
            out.close();
        }
    }

     protected void EvaluacionesProgramadas(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
           HttpSession session = request.getSession(true);
           RequestDispatcher rd;
           Vector<Calificaciones> LResumen  = new Vector<Calificaciones>();
            Calendar cal = GregorianCalendar.getInstance();
            Date fecha = new Date();
            int cod = Integer.parseInt(request.getParameter("codigo"));
            int mes = Integer.parseInt(request.getParameter("cboPeriodo"));
            int anio = Integer.parseInt(request.getParameter("anio"));
            cal.set(anio, mes, 1);
            String fechaDesde =  cal.getActualMinimum(GregorianCalendar.DAY_OF_MONTH) + "/" + (mes + 1) + "/" + anio;
            String fechaHasta = cal.getActualMaximum(GregorianCalendar.DAY_OF_MONTH) + "/" + (mes + 1) + "/" + anio;
            LResumen = Calificaciones.EvaluacionesProgramadasAlumnoSegunCodigoFechaDesdeFechaHasta(cod, fechaDesde, fechaHasta);
            String periodo = fechaDesde + " - " +fechaHasta;            
            request.setAttribute("r_estilo", true);
            String next = "/dinamica/alumno/include_consulta/evaluaciones_programadas.jsp";
            session.setAttribute("evaluacionesProgramadas", LResumen);
            session.setAttribute("periodo", periodo);
            rd=this.getServletContext().getRequestDispatcher(next);
            rd.forward(request,response);
        } finally {
            out.close();
        }
    }
    protected void enlaces(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {           
            HttpSession session = request.getSession(true);
            
           
          
                 int cod = Integer.parseInt(session.getAttribute("codPersona").toString());
             System.out.println("Primero"+request.getParameter("cboCurso"));
             if(request.getParameter("cboCurso")!=null)
             {
          
                  Utilidades oUtilidad;
                  oUtilidad =  Utilidades.GradoSeccionAlumno(cod);
                   ArrayList<EnlacesTemasSylabus> LEnlaces = new ArrayList<EnlacesTemasSylabus>();
                int codCurso = Integer.parseInt(request.getParameter("cboCurso"));
                int codNivelGrado = 0;
                codNivelGrado = Utilidades.nivelGradoAlumno(oUtilidad.getCodGrado(), oUtilidad.getCodNivel());
                LEnlaces = EnlacesTemasSylabus.enlacesPorNivelGradoCurso(codCurso, codNivelGrado);
                 System.out.println("Enlaces: "+LEnlaces.toString());
                response.getWriter().write(new Gson().toJson(LEnlaces));
             }
             else
             {
                   
                  List<Horarios> LCursos = new ArrayList<Horarios>();
                  LCursos = Horarios.listaCursosAlumnoSegunHorario(cod);
                    Utilidades oUtilidad = Utilidades.GradoSeccionAlumno(cod);
                 //System.out.println("Utilidad: "+oUtilidad);
                request.setAttribute("info", oUtilidad);
                  request.setAttribute("cursos", LCursos);
                 this.getServletContext().getRequestDispatcher( "/dinamica/alumno/AulaVirtual/AulaVirtualEnlaces.jsp").forward(request,response);
             }
       
        } finally {
            out.close();
        }
    }

   protected void ContenidosConceptuales(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            
           HttpSession session = request.getSession(true);
                 
            
           int cod = Integer.parseInt(session.getAttribute("codPersona").toString());
            if(request.getParameter("cboCurso")!=null)
            {
                 Calendar cal = GregorianCalendar.getInstance();
                Date fecha = new Date();
                Utilidades oUtilidad;
                    oUtilidad =  Utilidades.GradoSeccionAlumno(cod);
                int codCurso = Integer.parseInt(request.getParameter("cboCurso"));
                int mes = Integer.parseInt(request.getParameter("cboPeriodo"));
             
//                int codGrado = Integer.parseInt(request.getParameter("codGrado"));
//                int codNivel = Integer.parseInt(request.getParameter("codNivel"));
                cal.set((fecha.getYear() + 1900), mes, 1);
                    String fechaDesde =  cal.getActualMinimum(GregorianCalendar.DAY_OF_MONTH) + "/" + (mes + 1) + "/" + (fecha.getYear() + 1900);
                    String fechaHasta =  cal.getActualMaximum(GregorianCalendar.DAY_OF_MONTH) + "/" + (mes + 1) + "/" + (fecha.getYear() + 1900);
                    String periodo = fechaDesde + " - " +fechaHasta;
                    int codNivelGrado = 0;
                    codNivelGrado = Utilidades.nivelGradoAlumno(oUtilidad.getCodGrado(),oUtilidad.getCodNivel());
                    ArrayList<EnlacesTemasSylabus> LTemas = new ArrayList<EnlacesTemasSylabus>();
                    LTemas = EnlacesTemasSylabus.temasPorCursoNivelGradoYRangoFechas(codCurso, codNivelGrado, fechaDesde, fechaHasta);
                     response.getWriter().write(new Gson().toJson(LTemas));
            }
            else
            {
                  
                 List<Horarios> LCursos = new ArrayList<Horarios>();
                 LCursos = Horarios.listaCursosAlumnoSegunHorario(cod);
                 Utilidades oUtilidad = Utilidades.GradoSeccionAlumno(cod);
                 System.out.println(oUtilidad.getNombreAlumno());
                request.setAttribute("info", oUtilidad);
                request.setAttribute("cursos", LCursos);
                this.getServletContext().getRequestDispatcher("/dinamica/alumno/AulaVirtual/Conceptuales.jsp").forward(request,response);
            }
          
             
        
         //   request.setAttribute("r_estilo", true);            
            
            //session.setAttribute("contenidos", LTemas);
           // session.setAttribute("periodo", periodo);
         
        } finally {
            out.close();
        }
    }
   protected void detalleComunicados(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
           HttpSession session = request.getSession(true);
            RequestDispatcher rd;
            int codComunicado = Integer.parseInt(request.getParameter("codComunicado"));            
            request.setAttribute("r_estilo", true);
            String next = "/dinamica/alumno/include_comunicado/alum_comunicadosDetalle.jsp";
            ProyectosComunicados oComunicado = new ProyectosComunicados();
            oComunicado = ProyectosComunicados.ListaComunicadoPorCodComunicado(codComunicado);
            session.setAttribute("Dcomunicado", oComunicado);
            rd=this.getServletContext().getRequestDispatcher(next);
            rd.forward(request,response);
        } finally {
            out.close();
        }
    }

  protected void cabeceraProyectos(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {            
            List<ProyectosComunicados> LProyectos = new ArrayList<ProyectosComunicados> ();
            int codCurso = Integer.parseInt(request.getParameter("cboCurso"));
            int codGrado = Integer.parseInt(request.getParameter("codGrado"));
            int codNivel = Integer.parseInt(request.getParameter("codNivel"));
            int codSeccion = Integer.parseInt(request.getParameter("codSeccion"));
            int codNivelGrado = 0;
            codNivelGrado = Utilidades.nivelGradoAlumno(codGrado, codNivel);
            LProyectos = ProyectosComunicados.ListaCabeceraProyectosPorNivelGradoSeccionCurso(codNivelGrado, codSeccion, codCurso);
            StringBuilder sb = new StringBuilder();
            
            for(ProyectosComunicados actual:LProyectos){
                sb.append("[\"" + actual.getNombre() + "\",\"" + actual.getFecha()  + "\",\"<a href='javascript:showDialog("+ actual.getCodProyecto() + ");' class='approve_icon' title='Approve'></a>\"],");
            }
            String str = sb.substring(0,sb.length()-1);
            if(str.equals("")){
                str = "[]";
            }else{
                str = "[" + str + "]";
            }
            System.out.println("str: " + str);
            out.println(str);
//            request.setAttribute("proyectos", LProyectos);
//            this.getServletContext().getRequestDispatcher("/dinamica/alumno/AulaVirtual/ajaxProyectosInvest.jsp").forward(request,response);
        } finally {
            out.close();
        }
    }
  protected void detalleProyecto(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            int codComunicado = Integer.parseInt(request.getParameter("codProyecto"));  
            ProyectosComunicados oProyecto = new ProyectosComunicados();
            oProyecto = ProyectosComunicados.ProyectoPorCodProyecto(codComunicado);
            request.setAttribute("detalleProyecto", oProyecto);
            this.getServletContext().getRequestDispatcher("/dinamica/alumno/AulaVirtual/AulaVirtualInvestigacionDetalle.jsp").forward(request,response);
        } finally {
            out.close();
        }
    }

  protected void cabeceraPublicacionesLibros(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
             HttpSession session = request.getSession(true);
            RequestDispatcher rd;
           
            if( request.getParameter("tipo") != null)
            {
                String option = request.getParameter("tipo");
                String busca = request.getParameter("busca");
                 int tipo = Integer.parseInt(option);
                 ArrayList<Publicaciones> LPublicaciones = new ArrayList<Publicaciones>();
                LPublicaciones = Publicaciones.listaPublicacionesLibros(tipo,busca);
      
      
            response.getWriter().write(new Gson().toJson(LPublicaciones));
            }
            else
            {
                this.getServletContext().getRequestDispatcher("/dinamica/alumno/Biblioteca/biblioteca.jsp").forward(request,response);
            }
          
       
        } finally {
            out.close();
        }
    }

    protected void cabeceraPublicacionesRevistas(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
             HttpSession session = request.getSession(true);
            RequestDispatcher rd;
           
           // String busca = request.getParameter("txtBusca"+option);
              if( request.getParameter("tipo") != null)
            {
                 int tipo =Integer.parseInt(request.getParameter("tipo"));
                 String busca = request.getParameter("busca");
                  ArrayList<Publicaciones> LPublicaciones = new ArrayList<Publicaciones>();
                  LPublicaciones = Publicaciones.listaPublicacionesRevistas(tipo,busca);
                  response.getWriter().write(new Gson().toJson(LPublicaciones));
            } 
              else
            {
                this.getServletContext().getRequestDispatcher("/dinamica/alumno/Biblioteca/revista.jsp").forward(request,response);
            }
           
            
           
          /*  request.setAttribute("r_estilo", true);
            String next = "/dinamica/alumno/include_biblioteca/consultaBibliotecaRevistas.jsp";
            session.setAttribute("revistas", LPublicaciones);
            rd=this.getServletContext().getRequestDispatcher(next);
            rd.forward(request,response);*/
              
        } finally {
            out.close();
        }
    }

    protected void cabeceraPublicacionesTrabajos(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {/*
           HttpSession session = request.getSession(true);
            RequestDispatcher rd;
            String option = request.getParameter("tipo");
            String busca = request.getParameter("txtBusca"+option);
            int tipo = Integer.parseInt(option);
            Vector<Publicaciones> LPublicaciones = new Vector<Publicaciones>();
            LPublicaciones = Publicaciones.listaPublicacionesTrabajos(tipo,busca);
            request.setAttribute("r_estilo", true);
            String next = "/dinamica/alumno/include_biblioteca/consultaBibliotecaTrabajos.jsp";
            session.setAttribute("trabajos", LPublicaciones);
            rd=this.getServletContext().getRequestDispatcher(next);
            rd.forward(request,response);*/
            
              HttpSession session = request.getSession(true);
         
            
            if( request.getParameter("tipo") != null)
            {
                 int tipo =Integer.parseInt(request.getParameter("tipo"));
                   String busca = request.getParameter("busca");  
                    ArrayList<Publicaciones> LPublicaciones = new ArrayList<Publicaciones>();
                    LPublicaciones = Publicaciones.listaPublicacionesTrabajos(tipo,busca);
                    response.getWriter().write(new Gson().toJson(LPublicaciones));
            }
             else
            {
                this.getServletContext().getRequestDispatcher("/dinamica/alumno/Biblioteca/trabajos.jsp").forward(request,response);
            }
           
          
        } finally 
        {
            out.close();
        }
    }

     protected void detallePublicacion(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
           HttpSession session = request.getSession(true);
            RequestDispatcher rd;
            int codigo = Integer.parseInt(request.getParameter("codPublicacion"));
            Publicaciones oPublicacion = new Publicaciones();
            oPublicacion = Publicaciones.detallePublicaciones(codigo);
            request.setAttribute("r_estilo", true);
            String next = "/dinamica/alumno/include_biblioteca/alum_PublicacionesDetalle.jsp";
            session.setAttribute("publicacion", oPublicacion);
            rd=this.getServletContext().getRequestDispatcher(next);
            rd.forward(request,response);
        } finally {
            out.close();
        }
    }
     
   protected void notasPeriodo(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            int periodo = Integer.parseInt(request.getParameter("cboPeriodo"));
            int codigo  = Integer.parseInt(request.getParameter("codigo"));
            if(periodo!=0){
                ArrayList<Promedios> LNotas = new ArrayList<Promedios>();
                Promedios cabecera = new Promedios();
                ArrayList<Promedios> LPromMes1 = new ArrayList<Promedios>();
                ArrayList<Promedios> LPromMes2 = new ArrayList<Promedios>();
                ArrayList<Promedios> LPromMes3 = new ArrayList<Promedios>();
                ArrayList<Promedios> LNotasBimestrales = new ArrayList<Promedios>();
                ArrayList<Promedios> LNotasTrimestrales = new ArrayList<Promedios>();
                String next = "";
                switch(periodo){
                    case 1:
                        LNotas = Promedios.notasMes01(codigo);
                        cabecera.setNota1(1);
                        cabecera.setNota2(2);
                        cabecera.setNota3(3);
                        cabecera.setMensual(1);
                        break;
                    case 2:
                        LNotas = Promedios.notasMes02(codigo);  
                        cabecera.setNota1(4);
                        cabecera.setNota2(5);
                        cabecera.setNota3(6);
                        cabecera.setMensual(2);
                        break;
                    case 3:
                        LNotas = Promedios.notasMes03(codigo);  
                        cabecera.setNota1(7);
                        cabecera.setNota2(8);
                        cabecera.setNota3(9);
                        cabecera.setMensual(3);
                        break;
                    case 4:
                        LNotas = Promedios.notasMes04(codigo); 
                        cabecera.setNota1(10);
                        cabecera.setNota2(11);
                        cabecera.setNota3(12);
                        cabecera.setMensual(4);
                        break;
                    case 5:
                        LNotas = Promedios.notasMes05(codigo);
                        cabecera.setNota1(13);
                        cabecera.setNota2(14);
                        cabecera.setNota3(15);
                        cabecera.setMensual(5);
                        break;
                    case 6:
                         LNotas = Promedios.notasMes06(codigo);
                         cabecera.setNota1(16);
                         cabecera.setNota2(17);
                         cabecera.setNota3(18);
                         cabecera.setMensual(6);
                        break;
                    case 7:
                         LNotas = Promedios.notasMes07(codigo);
                         cabecera.setNota1(19);
                         cabecera.setNota2(20);
                         cabecera.setNota3(21);
                         cabecera.setMensual(7);
                        break;
                    case 8:
                         LNotas = Promedios.notasMes08(codigo);
                         cabecera.setNota1(22);
                         cabecera.setNota2(23);
                         cabecera.setNota3(24);
                         cabecera.setMensual(8);
                        break;
                    case 9:
                         LNotas = Promedios.notasMes09(codigo);
                         cabecera.setNota1(25);
                         cabecera.setNota2(26);
                         cabecera.setNota3(27);                     
                         cabecera.setMensual(9);
                        break;
                    case 21:
                            cabecera.setNota1(1);
                            cabecera.setNota2(2);                                             
                            cabecera.setMensual(1);
                            LNotasBimestrales = Promedios.notasBimestre01(codigo);
                            LPromMes1 = Promedios.notasMes01(codigo);
                            LPromMes2 = Promedios.notasMes02(codigo);
                        break;                    
                    case 22:
                            cabecera.setNota1(3);
                            cabecera.setNota2(4);                                             
                            cabecera.setMensual(2);
                            LNotasBimestrales = Promedios.notasBimestre02(codigo);
                            LPromMes1 = Promedios.notasMes03(codigo);
                            LPromMes2 = Promedios.notasMes04(codigo);
                        break;
                    case 23:
                            cabecera.setNota1(5);
                            cabecera.setNota2(6);                                             
                            cabecera.setMensual(3);
                            LNotasBimestrales = Promedios.notasBimestre03(codigo);
                            LPromMes1 = Promedios.notasMes05(codigo);
                            LPromMes2 = Promedios.notasMes06(codigo);
                        break;
                    case 24:
                            cabecera.setNota1(7);
                            cabecera.setNota2(8);                                             
                            cabecera.setMensual(4);
                            LNotasBimestrales = Promedios.notasBimestre04(codigo);
                            LPromMes1 = Promedios.notasMes07(codigo);
                            LPromMes2 = Promedios.notasMes08(codigo);
                        break;
                    case 31:
                        cabecera.setNota1(1);
                        cabecera.setNota2(2); 
                        cabecera.setNota3(3);
                        cabecera.setMensual(1);
                        LNotasTrimestrales = Promedios.notasTrimestre01(codigo);
                        LPromMes1 = Promedios.notasMes01(codigo);
                        LPromMes2 = Promedios.notasMes02(codigo);
                        LPromMes3 = Promedios.notasMes03(codigo);
                        break;
                    case 32:
                        cabecera.setNota1(4);
                        cabecera.setNota2(5); 
                        cabecera.setNota3(6);
                        cabecera.setMensual(2);
                        LNotasTrimestrales = Promedios.notasTrimestre02(codigo);
                        LPromMes1 = Promedios.notasMes04(codigo);
                        LPromMes2 = Promedios.notasMes05(codigo);
                        LPromMes3 = Promedios.notasMes06(codigo);
                        break;
                    case 33:
                        cabecera.setNota1(7);
                        cabecera.setNota2(8); 
                        cabecera.setNota3(9);
                        cabecera.setMensual(3);
                        LNotasTrimestrales = Promedios.notasTrimestre03(codigo);
                        LPromMes1 = Promedios.notasMes07(codigo);
                        LPromMes2 = Promedios.notasMes08(codigo);
                        LPromMes3 = Promedios.notasMes09(codigo);
                        break;

                }
                ArrayList<Promedios> NuevaListaProm = new ArrayList<Promedios>();
                 Utilidades oUtil = Utilidades.GradoSeccionAlumno(codigo);
                 ArrayList<Horarios> LCursos = new ArrayList<Horarios>();
                  LCursos = Horarios.listaCursosAlumnoSegunHorario(codigo);
                 int pesoM = Promedios.PesoMes(oUtil.getCodNivel());              
                 int pesoPM = Promedios.PesoPromedioMes(oUtil.getCodNivel());                
                 int pesoB = Promedios.PesoBimTrimestral(oUtil.getCodNivel()); 

                if(periodo>0 && periodo<10){
                    next = "/dinamica/alumno/Notas/ajaxNotasMensuales.jsp";
                    ArrayList<Promedios> NuevaLista = new ArrayList<Promedios>();
                    NuevaLista = Promedios.OrdenarNotas(LNotas, LCursos);         
                    NuevaListaProm = Promedios.calculaPromedio(NuevaLista, 3, pesoM); 
                }
                if(periodo>20 && periodo < 25){
                    
                    next = "/dinamica/alumno/Notas/ajaxNotasBimestrales.jsp";
                    System.out.println(next);
                    ArrayList<Promedios> LPromMesOrd1 = new ArrayList<Promedios>();
                    ArrayList<Promedios> LPromMesOrd2 = new ArrayList<Promedios>();               
                    LPromMesOrd1 = Promedios.OrdenarNotas(LPromMes1, LCursos);
                    LPromMesOrd2 = Promedios.OrdenarNotas(LPromMes2, LCursos);
                    ArrayList<Promedios> LPromMesOrdShow1 = new ArrayList<Promedios>();
                    ArrayList<Promedios> LPromMesOrdShow2 = new ArrayList<Promedios>();
                    LPromMesOrdShow1 = Promedios.calculaPromedio(LPromMesOrd1, 3, pesoM);
                    LPromMesOrdShow2 = Promedios.calculaPromedio(LPromMesOrd2, 3, pesoM);
                    ArrayList<Promedios> LPromBimestral = new ArrayList<Promedios>();
                    Promedios notas = null;
                    for(Horarios o: LCursos){
                        notas = new Promedios();
                        notas.setCurso(o.getNombreCurso());
                        for(Promedios P1: LPromMesOrdShow1){
                            if(P1.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                                notas.setMes1(P1.getPromedioMes());
                            }
                        }
                        for(Promedios P2: LPromMesOrdShow2){
                            if(P2.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                                notas.setMes2(P2.getPromedioMes());
                            }
                        }
                        for(Promedios NB: LNotasBimestrales){
                            if(NB.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                                notas.setNotaBimestral(NB.getNotaBimestral());
                            }
                        }
                    LPromBimestral.add(notas);
                    }
                    NuevaListaProm = new Promedios().calculaPromBimestral(LPromBimestral, 1, pesoB);
                }
                if(periodo>30 && periodo < 34){
//                    next = "/dinamica/alumno/include_consulta/result_notas_trimestre.jsp";
//                    Vector<Promedios> LPromMesOrd1 = new Vector<Promedios>();
//                    Vector<Promedios> LPromMesOrd2 = new Vector<Promedios>();
//                    Vector<Promedios> LPromMesOrd3 = new Vector<Promedios>();
//                    LPromMesOrd1 = Promedios.OrdenarNotas(LPromMes1, LCursos);
//                    LPromMesOrd2 = Promedios.OrdenarNotas(LPromMes2, LCursos);
//                    LPromMesOrd3 = Promedios.OrdenarNotas(LPromMes3, LCursos);
//                    Vector<Promedios> LPromMesOrdShow1 = new Vector<Promedios>();
//                    Vector<Promedios> LPromMesOrdShow2 = new Vector<Promedios>();
//                    Vector<Promedios> LPromMesOrdShow3 = new Vector<Promedios>();
//                    LPromMesOrdShow1 = Promedios.calculaPromedio(LPromMesOrd1, 3, pesoM);
//                    LPromMesOrdShow2 = Promedios.calculaPromedio(LPromMesOrd2, 3, pesoM);
//                    LPromMesOrdShow3 = Promedios.calculaPromedio(LPromMesOrd3, 3, pesoM);
//                    Vector<Promedios> LPromTrimestral = new Vector<Promedios>();
//                    Promedios notas = null;
//                    for(Horarios o: LCursos){
//                        notas = new Promedios();
//                        notas.setCurso(o.getNombreCurso());
//                        for(Promedios P1: LPromMesOrdShow1){
//                            if(P1.getCurso().equalsIgnoreCase(o.getNombreCurso())){
//                                notas.setMes1(P1.getPromedioMes());
//                            }
//                        }
//                        for(Promedios P2: LPromMesOrdShow2){
//                            if(P2.getCurso().equalsIgnoreCase(o.getNombreCurso())){
//                                notas.setMes2(P2.getPromedioMes());
//                            }
//                        }
//                        for(Promedios P3: LPromMesOrdShow3){
//                            if(P3.getCurso().equalsIgnoreCase(o.getNombreCurso())){
//                                notas.setMes3(P3.getPromedioMes());
//                            }
//                        }
//                        for(Promedios NB: LNotasTrimestrales){
//                            if(NB.getCurso().equalsIgnoreCase(o.getNombreCurso())){
//                                notas.setNotaTrimestral(NB.getNotaTrimestral());
//                            }
//                        }
//                        LPromTrimestral.add(notas);
//                    }
//                    NuevaListaProm = Promedios.calculaPromTrimestral(LPromTrimestral, pesoPM, pesoB);
                }

           
                request.setAttribute("notas", NuevaListaProm);
                request.setAttribute("cabecera", cabecera);
                
                this.getServletContext().getRequestDispatcher(next).forward(request,response);
            }else
            {
                notasExonerados(request, response);
            }
            
        } finally {
            out.close();
        }
    }
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
protected void comboPeriodo(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            HttpSession session = request.getSession(true);
            
            int cod = Integer.parseInt(session.getAttribute("codPersona").toString());
            System.out.println("codPersona: " + cod);
            Date fechaActual = new Date();
            Utilidades oUtil = new Utilidades();
            oUtil = Utilidades.GradoSeccionAlumno(cod);                   
            int anio = 0;
            if(oUtil.getAnioMatriculas()!=null){
                anio = Integer.parseInt(oUtil.getAnioMatriculas());
            }            
            Vector<String> LMuestraPeriodos = null;  
            if(anio < (fechaActual.getYear() + 1900)){
                 LMuestraPeriodos = new Vector<String>();                 
            }else{
                LMuestraPeriodos = new Vector<String>();                
                if((((fechaActual.getMonth()+1)>=4) )|| ((fechaActual.getMonth()+1)<=5)){
                   LMuestraPeriodos.add("21- Primer Bimestre");
                }
                if((((fechaActual.getMonth()+1)>=6) )|| ((fechaActual.getMonth()+1)<=7) ){
                    LMuestraPeriodos.add("22- Segundo Bimestre");
                }                
                if((((fechaActual.getMonth()+1)>=8))|| ((fechaActual.getMonth()+1)<=9) ){
                    LMuestraPeriodos.add("23- Tercer Bimestre");
                }                
                if((((fechaActual.getMonth()+1)>=10) )|| ((fechaActual.getMonth()+1)<=11) ){
                   LMuestraPeriodos.add("24- Cuarto Bimestre"); 
                   LMuestraPeriodos.add("00- Exonerados"); 
                }
            }
            Utilidades oUtilidad = Utilidades.GradoSeccionAlumno(cod);
            request.setAttribute("periodos", LMuestraPeriodos);
            request.setAttribute("codigo", cod);
            request.setAttribute("info", oUtilidad);
            this.getServletContext().getRequestDispatcher("/dinamica/alumno/Notas/NotasPeriodobimestre.jsp").forward(request,response);
            
        } finally {
            out.close();
        }
    }

protected void comboPeriodoMensual(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            HttpSession session = request.getSession(true);
            
            int cod = Integer.parseInt(session.getAttribute("codPersona").toString());
            System.out.println("codPersona: " + cod);
            Date fechaActual = new Date();
            Utilidades oUtil = new Utilidades();
            oUtil = Utilidades.GradoSeccionAlumno(cod);                   
            int anio = 0;
            if(oUtil.getAnioMatriculas()!=null){
                anio = Integer.parseInt(oUtil.getAnioMatriculas());
            } 
            System.out.println("comboPeriodoMensual");
            Vector<String> LMuestraPeriodos = null;  
            LMuestraPeriodos = new Vector<String>();                
            LMuestraPeriodos.add("1- Primer Mes");
            if(anio < (fechaActual.getYear() + 1900)){
                            
            }else{
                
                
                if((((fechaActual.getMonth()+1)>=4) ) ){
                    LMuestraPeriodos.add("2- Segundo Mes");
                }                
                if((((fechaActual.getMonth()+1)>=5))){
                    LMuestraPeriodos.add("3- Tercer Mes");
                }                
                if((((fechaActual.getMonth()+1)>=6) )){
                   LMuestraPeriodos.add("4- Cuarto Mes"); 
                }
                if((((fechaActual.getMonth()+1)>=7) ) ){
                   LMuestraPeriodos.add("5- Quinto Mes");
                }
                if((((fechaActual.getMonth()+1)>=8) ) ){
                   LMuestraPeriodos.add("6- Sexto Mes");
                }
                if((((fechaActual.getMonth()+1)>=9) ) ){
                   LMuestraPeriodos.add("7- Setimo Mes"); 
                }
                if((((fechaActual.getMonth()+1)>=10) ) ){
                   LMuestraPeriodos.add("8- Octavo Mes"); 
                }
            }
            Utilidades oUtilidad = Utilidades.GradoSeccionAlumno(cod);
            request.setAttribute("periodos", LMuestraPeriodos);
            request.setAttribute("codigo", cod);
            request.setAttribute("info", oUtilidad);
            this.getServletContext().getRequestDispatcher("/dinamica/alumno/Notas/NotasPeriodo.jsp").forward(request,response);
            
        } finally {
            out.close();
        }
    }


 protected void horarioAlumno(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
       
        try {
             HttpSession session = request.getSession(true);

            int cod = Integer.parseInt(session.getAttribute("codPersona").toString());
            Utilidades oUtilidad;
            oUtilidad =  Utilidades.GradoSeccionAlumno(cod);
            
            ArrayList<Horarios> LHorarios = new ArrayList<Horarios> ();
            LHorarios = new Horarios().HorarioAlumnoPorCodigoPersona(cod, oUtilidad.getCodNivel());
            request.setAttribute("utilidad", oUtilidad);
            request.setAttribute("horarios", LHorarios);
           
            this.getServletContext().getRequestDispatcher("/dinamica/alumno/Horario/HorarioAlumno.jsp").forward(request, response);
        } finally {
            out.close();
        }
    }
 
 private int tipoComunicado(String accion)
 {
     if(accion.equalsIgnoreCase("comuActividad"))
     {
         return 2;
     }
     else
     {
         if(accion.equalsIgnoreCase("comuAnuncio"))
         {
             return 4;
         }
         else
         {
             if(accion.equalsIgnoreCase("comuReunion"))
             {
                 return 1;
             }
             else
             {
                 //Si es comunCalendario
                     return 3;
                 
             }
         }
     }
 }
 private String tipoActividad(int tipo)
 {
     String rpta="";
     switch(tipo)
     {
         case 1:rpta="Reunion"; break;
         case 2:rpta="Actividad"; break;
         case 3:rpta="Calendario";break;
         case 4:rpta="Anuncio";  
     }
     
     return rpta;
 }
  protected void comunicadoActividad(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
       response.setContentType("text/html;charset=UTF-8");
      
        PrintWriter out = response.getWriter();
        try 
        {
            HttpSession session = request.getSession(true);
             int cod = Integer.parseInt(session.getAttribute("codPersona").toString());
//             Utilidades oUtilidades = new Utilidades();
//             oUtilidades = Utilidades.GradoSeccionAlumno(cod);
             Utilidades oUtilidad = Utilidades.GradoSeccionAlumno(cod);
             int codGradoNivel = 0;
             codGradoNivel = Utilidades.nivelGradoAlumno(oUtilidad.getCodGrado(), oUtilidad.getCodNivel());
 ArrayList<ProyectosComunicados> LReuniones = new ArrayList<ProyectosComunicados>();
 int tipoActividad=tipoComunicado(request.getParameter("accion"));
 LReuniones = ProyectosComunicados.ListaCabeceraComunicadoPorNivelGradoSeccionTipo(codGradoNivel, oUtilidad.getCodSeccion(),tipoActividad);
 
             
             request.setAttribute("actividad", LReuniones);
             
             this.getServletContext().getRequestDispatcher("/dinamica/alumno/Comunicados/Comunicado"+tipoActividad(tipoActividad)+".jsp").forward(request, response);
           
        }
        finally 
        {
            out.close();
        }
  }

   protected void calendarioAsistencia(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
       response.setContentType("text/html;charset=UTF-8");
      
        PrintWriter out = response.getWriter();
        try {
            int r=0;
             HttpSession session = request.getSession(true);
           
            Calendar cal = GregorianCalendar.getInstance();
            
          //  System.out.println("cod: "+ session.getAttribute("codPersona").toString());
             int cod=0;
        
            if(request.getParameter("codAlumno")!=null)
            {
                cod = Integer.parseInt(request.getParameter("codAlumno").toString());
                
            }
            else
            {
               
               if(session.getAttribute("codPersona")!=null)
               {
                    cod = Integer.parseInt(session.getAttribute("codPersona").toString());
               }
               
            }
           
            if(request.getParameter("cboPeriodo")!=null &&request.getParameter("anio")!=null )
            {
                        int mes = Integer.parseInt(request.getParameter("cboPeriodo"));
                        int anio = Integer.parseInt(request.getParameter("anio"));
                        System.out.println("A");
            cal.set(anio, mes, 1);
            int diaInicio =  cal.getActualMinimum(GregorianCalendar.DAY_OF_MONTH) ;
            int diaFinal = cal.getActualMaximum(GregorianCalendar.DAY_OF_MONTH) ;
            List<Asistencias> fechasNoAsistencia = new ArrayList<Asistencias>();
            System.out.println("A3");
            for(int i=diaInicio;i<=diaFinal;i++){
                System.out.println("A5");
                if((Asistencias.verificaSabadoDomingo(i+"/" + (mes + 1) + "/" + anio)!=0)&& (Asistencias.verificaSabadoDomingo(i+"/" + (mes + 1) + "/" + anio)!=6))
                {
                    System.out.println("A4");
                    Asistencias o = new Asistencias();
                    o.setDia(""+i);
                    o.setMes(""+(mes + 1));
                    o.setAnio(""+anio);
                    if(!Asistencias.asistenciaPuntualPorFecha(cod, i+"/" + (mes + 1) + "/" + anio))
                    {
                        if(Asistencias.asistenciaTardePorFecha(cod, i+"/" + (mes + 1) + "/" + anio))
                        {
                            o.setEstado_asistencia("T");
                            fechasNoAsistencia.add(o);
                        }
                        else
                           {
                             if(Asistencias.asistenciaJustificacionPorFecha(cod, i+"/" + (mes + 1) + "/" + anio))
                             {
                                o.setEstado_asistencia("J");
                                fechasNoAsistencia.add(o);
                             }
                             else
                             {
                                o.setEstado_asistencia("F");
                                fechasNoAsistencia.add(o);
                             }
                           }
                    }
                    else
                        {
                            o.setEstado_asistencia("A");
                            fechasNoAsistencia.add(o);
                        }
                 }
            }
             request.setAttribute("inicio",Asistencias.verificaSabadoDomingo( fechasNoAsistencia.get(0).getDia() + "/" + fechasNoAsistencia.get(0).getMes() + "/" + fechasNoAsistencia.get(0).getAnio()));
                System.out.println("Inicio: "+Asistencias.verificaSabadoDomingo( fechasNoAsistencia.get(0).getDia() + "/" + fechasNoAsistencia.get(0).getMes() + "/" + fechasNoAsistencia.get(0).getAnio()));
 
                int dia=Asistencias.verificaSabadoDomingo( fechasNoAsistencia.get(0).getDia() + "/" + fechasNoAsistencia.get(0).getMes() + "/" + fechasNoAsistencia.get(0).getAnio());
              r=1; 
              //Sólo tendra un inicio//
              Asistencias inicio=new Asistencias();
              inicio.setInicio(dia);
              fechasNoAsistencia.add(inicio);
            
             response.getWriter().write(new Gson().toJson( fechasNoAsistencia));
       
              //  this.getServletContext().getRequestDispatcher(new Gson().toJson( fechasNoAsistencia));
           System.out.println("GSON: "+new Gson().toJson( fechasNoAsistencia));
                    }
            
            
           
            System.out.println("6");
           Utilidades oUtilidad = Utilidades.GradoSeccionAlumno(cod);
        //  request.setAttribute("utilidad", Utilidades.GradoSeccionAlumno(cod));
          request.setAttribute("info", oUtilidad);
            System.out.println("R:" +r);
        //  request.setAttribute("periodo", diaInicio +"/" + (mes + 1) + "/" + anio + " - " + diaFinal +"/" + (mes + 1) + "/" + anio);
         if(r==0)
         {
                this.getServletContext().getRequestDispatcher("/dinamica/alumno/Asistencia/Asistencia.jsp").forward(request, response);
        }
            
        } finally 
        {
            out.close();
        }
    }
        
    protected void notasExonerados(HttpServletRequest request, HttpServletResponse response)     throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
        int codPersona = Integer.parseInt(request.getParameter("codigo"));        
        Utilidades oUtil = new Utilidades().GradoSeccionAlumno(codPersona);
        List<Utilidades> listaCurso = new Utilidades().ListacursosPorNivelGrado(oUtil.getCodNivel(), oUtil.getCodGrado());        
        double pesoM = new Promedios().PesoMes(oUtil.getCodNivel());              
        double pesoB = new Promedios().PesoBimTrimestral(oUtil.getCodNivel()); 
        DecimalFormatSymbols dformater_rules = new DecimalFormatSymbols ();
        dformater_rules.setDecimalSeparator ('.');
        DecimalFormat df = new DecimalFormat("0.00", dformater_rules);
        df.setMaximumFractionDigits(2);
        List<PromediosExo> listaFinal = new ArrayList<PromediosExo>();          

          List<PromediosExo> notasGlobal = new PromediosExo().notasGlobales(codPersona);
          llenarListas(notasGlobal);          
          List<PromediosExo> primerBimestre = notasPrimerBimestre(listaCurso, pesoM, pesoB);
          for(int j=0;j<primerBimestre.size();j++){
              PromediosExo p = primerBimestre.get(j);
              PromediosExo promFinal = new PromediosExo();
              promFinal.setCurso(p.getCurso());
              promFinal.setPromBimestre1(Double.parseDouble(df.format(p.getPromedioBimestral())));        
              listaFinal.add(promFinal);
          }           
          List<PromediosExo> segundoBimestre = notasSegundoBimestre(listaCurso, pesoM, pesoB);
          for(int j=0;j<segundoBimestre.size();j++){
              PromediosExo p = segundoBimestre.get(j);
              PromediosExo actual = listaFinal.get(j);
              actual.setPromBimestre2(Double.parseDouble(df.format(p.getPromedioBimestral())));              
          }
          List<PromediosExo> tercerBimestre = notasTercerBimestre(listaCurso, pesoM, pesoB);
          for(int j=0;j<tercerBimestre.size();j++){
              PromediosExo p = tercerBimestre.get(j);
              PromediosExo actual = listaFinal.get(j);
              actual.setPromBimestre3(Double.parseDouble(df.format(p.getPromedioBimestral())));
          }          
          List<PromediosExo> cuartoBimestreProy = notasCuartoBimestreProy(listaCurso, pesoM);
          for(int j=0;j<cuartoBimestreProy.size();j++){
              PromediosExo p = cuartoBimestreProy.get(j);
              PromediosExo actual = listaFinal.get(j);
              actual.setPromBimestre4Proy(Double.parseDouble(df.format(p.getPromedioBimestral())));
          }  
          List<PromedioExonerados> listaprom = new ArrayList<PromedioExonerados>();
          for(PromediosExo actual:listaFinal){
              PromedioExonerados prom = new PromedioExonerados();
              String estado = "";
              boolean esExo = true;
              if(actual.getPromBimestre1()<11){
                  estado = "NO EXONERADO";
                  esExo = false;
              }
              if(actual.getPromBimestre2()<11){
                  estado = "NO EXONERADO";
                  esExo = false;
              }
              if(actual.getPromBimestre3()<11){
                  estado = "NO EXONERADO";
                  esExo = false;
              }
              if(actual.getPromBimestre4Proy()<11){
                  estado = "NO EXONERADO";
                  esExo = false;
              }
              if(esExo){
                  double nota = (actual.getPromBimestre1() + actual.getPromBimestre2() + actual.getPromBimestre3() + actual.getPromBimestre4Proy())/4;
                  if(nota<13){
                      estado = "NO EXONERADO";
                  }else{
                      estado = "EXONERADO";
                  }
              }
              prom.setNombreCurso(actual.getCurso());
              prom.setPromBim1(""+actual.getPromBimestre1());
              prom.setPromBim2(""+actual.getPromBimestre2());
              prom.setPromBim3(""+actual.getPromBimestre3());
              prom.setPromBim4(""+actual.getPromBimestre4Proy());
              prom.setCondicion(estado);
              listaprom.add(prom);
          }
          listaFinal.clear();                                               
          Utilidades oUtilidad = new Utilidades();
          oUtilidad =  Utilidades.GradoSeccionAlumno(codPersona);        
          Alumno oAlumno = new Alumno();
          oAlumno = Alumno.NombreAlumnoSegunCodigo(codPersona);
          for(PromedioExonerados p:listaprom){
              if(p.getNombreCurso().equalsIgnoreCase("TUTORIA")){
                  listaprom.remove(p);
                  break;
              }                  
          }
          request.setAttribute("notas", listaprom);
          request.setAttribute("alumno", oAlumno);
          request.setAttribute("utilidad", oUtilidad);
          this.getServletContext().getRequestDispatcher("/dinamica/apoderado/include_consulta/result_notas_exonerados.jsp").forward(request, response);
          

        } finally {
            out.close();
        }
    }
    
     List<PromediosExo> notaBimestral1 = new ArrayList<PromediosExo>();
     List<PromediosExo> notaBimestral2 = new ArrayList<PromediosExo>();
     List<PromediosExo> notaBimestral3 = new ArrayList<PromediosExo>();
     List<PromediosExo> notaMes1 = new ArrayList<PromediosExo>();
     List<PromediosExo> notaMes2 = new ArrayList<PromediosExo>();
     List<PromediosExo> notaMes3 = new ArrayList<PromediosExo>();
     List<PromediosExo> notaMes4 = new ArrayList<PromediosExo>();
     List<PromediosExo> notaMes5 = new ArrayList<PromediosExo>();
     List<PromediosExo> notaMes6 = new ArrayList<PromediosExo>();
     List<PromediosExo> notaMes7 = new ArrayList<PromediosExo>();
     List<PromediosExo> notaMes8 = new ArrayList<PromediosExo>();
    
    public  List<PromediosExo> notasPrimerBimestre(List<Utilidades> listaCurso, double pesoM, double pesoB){
        List<PromediosExo> LPromMesOrdShow1 = new PromediosExo().calculaPromedio(notaMes1, 3, (int)pesoM);
        List<PromediosExo> LPromMesOrdShow2 = new PromediosExo().calculaPromedio(notaMes2, 3, (int)pesoM);
        List<PromediosExo> LPromBimestral = new ArrayList<PromediosExo>();
        List<PromediosExo> NuevaListaProm = new ArrayList<PromediosExo>();
        PromediosExo notas = null;
        for(int i=0;i< listaCurso.size();i++){
            Utilidades o = listaCurso.get(i);
            notas = new PromediosExo();
            notas.setCurso(o.getNombreCurso());
            for(int j = 0; j<LPromMesOrdShow1.size();j++){
                PromediosExo P1 = LPromMesOrdShow1.get(j);
                if(P1.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                    notas.setMes1(P1.getPromedioMes());
                }
            }
            for(int j = 0; j<LPromMesOrdShow2.size();j++){
                PromediosExo P2 = LPromMesOrdShow2.get(j);
                if(P2.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                    notas.setMes2(P2.getPromedioMes());
                }
            }
            for(int j = 0; j<notaBimestral1.size();j++){
                PromediosExo NB = notaBimestral1.get(j);
                if(NB.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                    notas.setNotaBimestral(NB.getNotaBimestral());
                }
            }
        LPromBimestral.add(notas);
        }
      NuevaListaProm = new PromediosExo().calculaPromBimestral(LPromBimestral, 1, (int)pesoB);
      return NuevaListaProm;
    }
    
    public  List<PromediosExo> notasSegundoBimestre(List<Utilidades> listaCurso, double pesoM, double pesoB){
        List<PromediosExo> LPromMesOrdShow1 = new PromediosExo().calculaPromedio(notaMes3, 3, (int)pesoM);
        List<PromediosExo> LPromMesOrdShow2 = new PromediosExo().calculaPromedio(notaMes4, 3, (int)pesoM);
        List<PromediosExo> LPromBimestral = new ArrayList<PromediosExo>();
        List<PromediosExo> NuevaListaProm = new ArrayList<PromediosExo>();
        PromediosExo notas = null;
        for(int i=0;i< listaCurso.size();i++){
            Utilidades o = listaCurso.get(i);
            notas = new PromediosExo();
            notas.setCurso(o.getNombreCurso());
            for(int j = 0; j<LPromMesOrdShow1.size();j++){
                PromediosExo P1 = LPromMesOrdShow1.get(j);
                if(P1.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                    notas.setMes1(P1.getPromedioMes());
                }
            }
            for(int j = 0; j<LPromMesOrdShow2.size();j++){
                PromediosExo P2 = LPromMesOrdShow2.get(j);
                if(P2.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                    notas.setMes2(P2.getPromedioMes());
                }
            }
            for(int j = 0; j<notaBimestral2.size();j++){
                PromediosExo NB = notaBimestral2.get(j);
                if(NB.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                    notas.setNotaBimestral(NB.getNotaBimestral());
                }
            }
        LPromBimestral.add(notas);
        }
      NuevaListaProm = new PromediosExo().calculaPromBimestral(LPromBimestral, 1, (int)pesoB);
      return NuevaListaProm;
    }
    
    public  List<PromediosExo> notasTercerBimestre(List<Utilidades> listaCurso, double pesoM, double pesoB){
        List<PromediosExo> LPromMesOrdShow1 = new PromediosExo().calculaPromedio(notaMes5, 3, (int)pesoM);
        List<PromediosExo> LPromMesOrdShow2 = new PromediosExo().calculaPromedio(notaMes6, 3, (int)pesoM);
        List<PromediosExo> LPromBimestral = new ArrayList<PromediosExo>();
        List<PromediosExo> NuevaListaProm = new ArrayList<PromediosExo>();
        PromediosExo notas = null;
        for(int i=0;i< listaCurso.size();i++){
            Utilidades o = listaCurso.get(i);
            notas = new PromediosExo();
            notas.setCurso(o.getNombreCurso());
            for(int j = 0; j<LPromMesOrdShow1.size();j++){
                PromediosExo P1 = LPromMesOrdShow1.get(j);
                if(P1.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                    notas.setMes1(P1.getPromedioMes());
                }
            }
            for(int j = 0; j<LPromMesOrdShow2.size();j++){
                PromediosExo P2 = LPromMesOrdShow2.get(j);
                if(P2.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                    notas.setMes2(P2.getPromedioMes());
                }
            }
            for(int j = 0; j<notaBimestral3.size();j++){
                PromediosExo NB = notaBimestral3.get(j);
                if(NB.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                    notas.setNotaBimestral(NB.getNotaBimestral());
                }
            }
        LPromBimestral.add(notas);
        }
      NuevaListaProm = new PromediosExo().calculaPromBimestral(LPromBimestral, 1, (int)pesoB);
      return NuevaListaProm;
    }
    
    public  List<PromediosExo> notasCuartoBimestreProy(List<Utilidades> listaCurso, double pesoM){
        List<PromediosExo> LPromMesOrdShow1 = new PromediosExo().calculaPromedio(notaMes7, 3, (int)pesoM);
        List<PromediosExo> LPromMesOrdShow2 = new PromediosExo().calculaPromedio(notaMes8, 3, (int)pesoM);
        List<PromediosExo> LPromBimestral = new ArrayList<PromediosExo>();
        List<PromediosExo> NuevaListaProm = new ArrayList<PromediosExo>();
        PromediosExo notas = null;
        for(int i=0;i< listaCurso.size();i++){
            Utilidades o = listaCurso.get(i);
            notas = new PromediosExo();
            notas.setCurso(o.getNombreCurso());
            for(int j = 0; j<LPromMesOrdShow1.size();j++){
                PromediosExo P1 = LPromMesOrdShow1.get(j);
                if(P1.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                    notas.setMes1(P1.getPromedioMes());
                }
            }
            for(int j = 0; j<LPromMesOrdShow2.size();j++){
                PromediosExo P2 = LPromMesOrdShow2.get(j);
                if(P2.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                    notas.setMes2(P2.getPromedioMes());
                    
                }
            }            
        LPromBimestral.add(notas);
        }
      NuevaListaProm = new PromediosExo().calculaPromBimestralProy(LPromBimestral, 1);
      return NuevaListaProm;
    }
    
    
    public  void llenarListas(List<PromediosExo> notas){
        PromediosExo actual = null;
        for(PromediosExo o:notas){
            actual = new PromediosExo();
            actual.setCurso(o.getCurso());
            actual.setNota1(o.getSemanal1());
            actual.setNota2(o.getSemanal2());
            actual.setNota3(o.getSemanal3());
            actual.setMensual(o. getMensual1());
            notaMes1.add(actual);
            actual = new PromediosExo();
            actual.setCurso(o.getCurso());
            actual.setNota1(o.getSemanal4());
            actual.setNota2(o.getSemanal5());
            actual.setNota3(o.getSemanal6());
            actual.setMensual(o. getMensual2());
            notaMes2.add(actual);
            actual = new PromediosExo();
            actual.setCurso(o.getCurso());
            actual.setNota1(o.getSemanal7());
            actual.setNota2(o.getSemanal8());
            actual.setNota3(o.getSemanal9());
            actual.setMensual(o. getMensual3());
            notaMes3.add(actual);
            actual = new PromediosExo();
            actual.setCurso(o.getCurso());
            actual.setNota1(o.getSemanal10());
            
            actual.setNota2(o.getSemanal11());
            actual.setNota3(o.getSemanal12());
            actual.setMensual(o. getMensual4());
            notaMes4.add(actual);
            actual = new PromediosExo();
            actual.setCurso(o.getCurso());
            actual.setNota1(o.getSemanal13());
            actual.setNota2(o.getSemanal14());
            actual.setNota3(o.getSemanal15());
            actual.setMensual(o. getMensual5());
            notaMes5.add(actual);
            actual = new PromediosExo();
            actual.setCurso(o.getCurso());
            actual.setNota1(o.getSemanal16());
            actual.setNota2(o.getSemanal17());
            actual.setNota3(o.getSemanal18());
            actual.setMensual(o. getMensual6());
            notaMes6.add(actual);
            actual = new PromediosExo();
            actual.setCurso(o.getCurso());
            actual.setNota1(o.getSemanal19());
            actual.setNota2(o.getSemanal20());
            actual.setNota3(o.getSemanal21());
            actual.setMensual(o. getMensual7());
            notaMes7.add(actual);
            actual = new PromediosExo();
            actual.setCurso(o.getCurso());
            actual.setNota1(o.getSemanal22());
            actual.setNota2(o.getSemanal23());
            actual.setNota3(o.getSemanal24());
            actual.setMensual(o. getMensual8());
            notaMes8.add(actual);
            actual = new PromediosExo();
            actual.setCurso(o.getCurso());
            actual.setNotaBimestral(o.getBimestral1());
            notaBimestral1.add(actual);
            actual = new PromediosExo();
            actual.setCurso(o.getCurso());
            actual.setNotaBimestral(o.getBimestral2());
            notaBimestral2.add(actual);
            actual = new PromediosExo();
            actual.setCurso(o.getCurso());
            actual.setNotaBimestral(o.getBimestral3());
            notaBimestral3.add(actual);
            
        }
        
    }
}
